package com.hfi.manongfanshen;

/**
 * 第1章：递归那点事儿
 * @author ChangLiang
 * @date 2019/12/9
 */
public class Factorial {

    /**
     * 时间复杂度O(n) 空间复杂度O(n)
     * @param n
     * @return
     * @throws RuntimeException
     */
    public int factorial1(int n) {
        if (n <= 0) {
            throw new RuntimeException("要输入大于等于1的值");
        }
        if (n == 1) {
            return 1;
        } else {
            return n * factorial1(n - 1);
        }
    }

    /**
     * 时间复杂度O(n) 空间复杂度O(1)
     * @param n
     * @param result
     * @return
     */
    public int factorial2(int n, int result) {
        if (n <= 0) {
            throw new RuntimeException("要输入大于等于1的值");
        }
        if (n == 1) {
            return result;
        } else {
            return factorial2(n - 1, n * result);
        }
    }
}
